using System;
using System.Collections.Generic;
using System.Linq;

namespace TaskKernel.Domain.Interface
{
    public interface IQueryTask
    {
        Task GetTask(Guid id);
        //Task GetTaskByCode(int code);
        IQueryable<Task> GetTasksByDepartment(Department department);
        IQueryable<Task> GetTasksByDepartmentForOtherRole(Account account, Department department);
        IEnumerable<Task> GetTasksInProgressWhereIamExecutor(Account account);
        IEnumerable<Task> GetTasksInProgressWhereIamParticipant(Account account);
        IEnumerable<Task> GetTasksInProgressWhereIamOwner(Account account);
        IQueryable<Task> GetArchiveTasksInOwnDepartment(Account account, Department department);
        IQueryable<Task> GetArchiveTasksByDepartmentForOtherRole(Account account, Department department);
        IEnumerable<Task> RequestCloseTasksWithTimeCreate(DateTime dateTime);
        IEnumerable<Task> WaitToCloseTasksOwnerInDepartment(Account account, Department department);
        IEnumerable<Task> GetArchiveTasksBySearchCriteria(Account account, SearchModel modelSearch);
        IEnumerable<Task> GetNotArchiveTasksBySearchCriteria(Account account, SearchModel modelSearch);
        IEnumerable<Task> UnclosedTasksWithExpireReminder(DateTime dateTime);
        IQueryable<Task> GetTasksWithRatingsInCurrentDepartment(Department department, DateTime start, DateTime end);
    }
}